package com.unalm.examensustitutorio.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

import com.unalm.examensustitutorio.util.entity.ECronogramaExamen;
import com.unalm.examensustitutorio.util.entity.EDetalleNota;
import com.unalm.examensustitutorio.util.entity.EInscripcion;
import com.unalm.examensustitutorio.util.entity.EUsuario;

public class DInscripcion implements IDInscripcion {

	private EntityManagerFactory emf;
	private EntityManager em;

	public void setEmf(EntityManagerFactory emf) {
		this.emf = emf;
	}

	@Override
	public EUsuario insertaInscripcion(EInscripcion inscripcion) {

		em = emf.createEntityManager();

		EDetalleNota detalleNota = null;
		EUsuario eUsuario = null;

		try {

			Query consulta = em
					.createQuery("select dn from EDetalleNota dn where dn.tbCurso.str_codCurso = '"
							+ inscripcion.getTbCurso().getStr_codCurso()
							+ "' and dn.tbUsuario.str_codUsuario='"
							+ inscripcion.getTbUsuario().getStr_codUsuario()
							+ "'");
			detalleNota = (EDetalleNota) consulta.getSingleResult();

			detalleNota.setInt_estReg(0);

			eUsuario = em.find(EUsuario.class, inscripcion.getTbUsuario()
					.getStr_codUsuario());

			if (inscripcion.getTbTipoExamen().getStr_codTipo()
					.equalsIgnoreCase("1")) {

				eUsuario.setInt_examenExtemporaneoUSU(eUsuario
						.getInt_examenExtemporaneoUSU() + 1);
			} else if (inscripcion.getTbTipoExamen().getStr_codTipo()
					.equalsIgnoreCase("2")) {

				eUsuario.setInt_examenPlazadoUSU(eUsuario
						.getInt_examenPlazadoUSU() + 1);

			}
			em.getTransaction().begin();
			em.merge(eUsuario);
			em.merge(detalleNota);
			em.persist(inscripcion);

		} catch (Exception e) {
			e.printStackTrace();
			em.getTransaction().rollback();

		} finally {
			em.getTransaction().commit();
			em.close();
		}

		return eUsuario;

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<EInscripcion> consulta(String codTipo, String codCurso) {

		em = emf.createEntityManager();

		List<EInscripcion> lstInscripcion = null;
		em = emf.createEntityManager();
		try {

			Query consulta = em
					.createQuery("select c from EInscripcion c where c.tbCurso.str_codCurso = '"
							+ codCurso
							+ "' and c.tbTipoExamen.str_codTipo = '"
							+ codTipo + "'");

			lstInscripcion = consulta.getResultList();

		} catch (Exception e) {

			e.printStackTrace();
		} finally {
			em.close();
		}

		return lstInscripcion;
	}

}
